#ifndef __GENERADOR_DE_RELACIONES_H__
#define __GENERADOR_DE_RELACIONES_H__

#include "descriptor_alumno.h"
#include "calculador_de_ganancia.h"
#include "conjunto_de_descriptores.h"
#include "clasificador_de_alumnos_por_descriptor.h"
#include "resultado.h"

class GeneradorDeRelaciones{

private:


	/**
	 * Precondiciones: La lista debe existir y el descriptor debe ser valido.
	 * Postcondiciones: Retorna true si el descriptor tiene el valor indicado
	 *                  para todos los alumnos de la lista.
	 */
	bool elDescriptorEsSiempre(Lista<Alumno*>*, DescriptorAlumno, bool);

	/**
	 * Precondiciones: La lista debe existir.
	 * Postcondiciones: Remueve los descriptores del conjunto que tengan un
	 *                  mismo valor para todos los alumnos.
	 */
	void limpiarDescriptores(Lista<Alumno*>*, ConjuntoDeDescriptores&);

	/**
	 * Precondiciones: La lista debe existir.
	 * Postcondiciones: Retorna true si la mayoria de los alumnos tienen promedio
	 *                  mayor a cuatro.
	 */
	bool mayoriaConPromedioSobreCuatro(Lista<Alumno*>*);

	/**
	 * Precondiciones: La lista debe existir y no estar vacia, y el descriptor debe ser valido.
	 * Postcondiciones: Retorna una lista con las relaciones.
	 */
	NodoArbolBinario<DescriptorAlumno>* generarArbolDeRelaciones(Lista<Alumno*>*, DescriptorAlumno, ConjuntoDeDescriptores);

public:

	/**
	 * Precondiciones: La lista debe existir y no estar vacia, y el descriptor debe ser valido.
	 * Postcondiciones: Retorna las relaciones en forma de Resultado.
	 */
	Resultado generarRelaciones(Lista<Alumno*>*, DescriptorAlumno, ConjuntoDeDescriptores);

};

#endif /* __GENERADOR_DE_RELACIONES_H__ */
